using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

using tp1.Entidades;

namespace tp1.Escena
{
    class Escena
    {
        private Punto limiteMundoIB = new Punto(0, 0);
        private Punto limiteMundoDA = new Punto(1600, 600);
        private Punto puntoSuelo = new Punto(0, 40);

        private Suelo suelo = new Suelo();
        private List<Nube> listaNubes = new List<Nube>();
        private Helicoptero helicoptero; 
        private Camion camion = new Camion();
        private List<Caja> listaCajas = new List<Caja>();

        #region Propiedades
        public Helicoptero Helicoptero
        {
            set { helicoptero = value; }
            get { return helicoptero; }
        }

        public Camion Camion
        {
            get { return camion; }
            set { camion = value; }
        }

        public List<Caja> ListaCajas
        {
            get { return listaCajas; }
        }

        public Punto LimiteMundoIB
        {
            get { return limiteMundoIB; }
        }

        public Punto LimiteMundoDA
        {
            get { return limiteMundoDA; }
        }

        public Punto PuntoSuelo
        {
            get { return puntoSuelo; }
        }
        #endregion

        public Escena()
        {
            //Aca en teoria la vista deberia ser (0,799,599,0) a (799,1598,599,0) de punta a punta
            //Arranca del lado derecho
            //Pipeline.WorldWindow(799, 1598, 599, 0);
            Pipeline.WorldWindow(0, 799, 599, 0);
            //Pipeline.WorldWindow(0, 1598, 599, 0);
            //Para el viewport debe ser siempre (0,799,0,599)
            Pipeline.Viewport(0, 799, 0, 599);
            //Pipeline.Viewport(0, 400, 0, 300);

            helicoptero = new Helicoptero(new Punto(0, 600), new Punto(1600, 200), puntoSuelo);

            listaNubes.Add(new Nube(TipoNube.NubeLarga, new Punto(900, 520)));
            listaNubes.Add(new Nube(TipoNube.NubeMediana, new Punto(1000, 500)));
            listaNubes.Add(new Nube(TipoNube.NubeCorta, new Punto(1500, 260)));
            listaNubes.Add(new Nube(TipoNube.NubeMediana, new Punto(700, 200)));
            listaNubes.Add(new Nube(TipoNube.NubeLarga, new Punto(300, 420)));
            listaNubes.Add(new Nube(TipoNube.NubeLarga, new Punto(200, 400)));
            listaNubes.Add(new Nube(TipoNube.NubeCorta, new Punto(420, 410)));
            listaNubes.Add(new Nube(TipoNube.NubeLarga, new Punto(1600, 550)));

            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaA, new Punto(1600, 70), new Punto(0.7, 1)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaB, new Punto(1500, 70), new Punto(1, 1.3)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaA, new Punto(1400, 70), new Punto(1, 1)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaB, new Punto(1300, 70), new Punto(0.8, 1.2)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaA, new Punto(1200, 70), new Punto(0.7, 0.8)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaB, new Punto(1100, 70), new Punto(1, 1.2)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaA, new Punto(1000, 70), new Punto(1, 1.2)));
            listaCajas.Add(Caja.CrearCaja(TipoCaja.CajaB, new Punto(900, 70), new Punto(0.9, 0.7)));

        }

        public void Dibujar()
        {
            double xMin = helicoptero.Centro.X - 399;
            double xMax = helicoptero.Centro.X + 399;
            if (xMin < 0)
            {
                xMin = 0;
                xMax = 799;
            }
            if (xMax > 1598)
            {
                xMin = 799;
                xMax = 1598;
            }

            Pipeline.WorldWindow(xMin, xMax, 599, 0);


            suelo.Dibujar();
            foreach (Nube nube in listaNubes)
            {
                nube.Dibujar();
            }


            helicoptero.Dibujar();

            foreach (Caja caja in listaCajas)
            {
                caja.Dibujar();
            }

            camion.Dibujar();
        }

    }
}
